home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 January: Mac OS SDK / Dev.CD Jan 99 SDK1.toast / Development Kits / Interfaces&Libraries / Universal / Interfaces / CIncludes / QD3DLight.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-08-17  |  9.7 KB  |  361 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        QD3DLight.h
  3.  
  4.      Contains:    Generic light routines                                             
  5.  
  6.      Version:    Technology:    Quickdraw 3D 1.5.4
  7.                  Release:    Universal Interfaces 3.2
  8.  
  9.      Copyright:    © 1995-1998 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. */
  17. #ifndef __QD3DLIGHT__
  18. #define __QD3DLIGHT__
  19.  
  20. #ifndef __QD3D__
  21. #include <QD3D.h>
  22. #endif
  23.  
  24.  
  25.  
  26. #if PRAGMA_ONCE
  27. #pragma once
  28. #endif
  29.  
  30. #ifdef __cplusplus
  31. extern "C" {
  32. #endif
  33.  
  34. #if PRAGMA_IMPORT
  35. #pragma import on
  36. #endif
  37.  
  38. #if PRAGMA_STRUCT_ALIGN
  39.     #pragma options align=power
  40. #elif PRAGMA_STRUCT_PACKPUSH
  41.     #pragma pack(push, 2)
  42. #elif PRAGMA_STRUCT_PACK
  43.     #pragma pack(2)
  44. #endif
  45.  
  46. #if PRAGMA_ENUM_ALWAYSINT
  47.     #pragma enumsalwaysint on
  48. #elif PRAGMA_ENUM_OPTIONS
  49.     #pragma option enum=int
  50. #elif PRAGMA_ENUM_PACK
  51.     #if __option(pack_enums)
  52.         #define PRAGMA_ENUM_PACK__QD3DLIGHT__
  53.     #endif
  54.     #pragma options(!pack_enums)
  55. #endif
  56.  
  57. /******************************************************************************
  58.  **                                                                             **
  59.  **                            Enum Definitions                                 **
  60.  **                                                                             **
  61.  *****************************************************************************/
  62.  
  63. enum TQ3AttenuationType {
  64.     kQ3AttenuationTypeNone        = 0,
  65.     kQ3AttenuationTypeInverseDistance = 1,
  66.     kQ3AttenuationTypeInverseDistanceSquared = 2
  67. };
  68. typedef enum TQ3AttenuationType TQ3AttenuationType;
  69.  
  70.  
  71.  
  72. enum TQ3FallOffType {
  73.     kQ3FallOffTypeNone            = 0,
  74.     kQ3FallOffTypeLinear        = 1,
  75.     kQ3FallOffTypeExponential    = 2,
  76.     kQ3FallOffTypeCosine        = 3
  77. };
  78. typedef enum TQ3FallOffType TQ3FallOffType;
  79.  
  80.  
  81. /******************************************************************************
  82.  **                                                                             **
  83.  **                            Data Structure Definitions                         **
  84.  **                                                                             **
  85.  *****************************************************************************/
  86.  
  87. struct TQ3LightData {
  88.     TQ3Boolean                         isOn;
  89.     float                             brightness;
  90.     TQ3ColorRGB                     color;
  91. };
  92. typedef struct TQ3LightData                TQ3LightData;
  93.  
  94. struct TQ3DirectionalLightData {
  95.     TQ3LightData                     lightData;
  96.     TQ3Boolean                         castsShadows;
  97.     TQ3Vector3D                     direction;
  98. };
  99. typedef struct TQ3DirectionalLightData    TQ3DirectionalLightData;
  100.  
  101. struct TQ3PointLightData {
  102.     TQ3LightData                     lightData;
  103.     TQ3Boolean                         castsShadows;
  104.     TQ3AttenuationType                 attenuation;
  105.     TQ3Point3D                         location;
  106. };
  107. typedef struct TQ3PointLightData        TQ3PointLightData;
  108.  
  109. struct TQ3SpotLightData {
  110.     TQ3LightData                     lightData;
  111.     TQ3Boolean                         castsShadows;
  112.     TQ3AttenuationType                 attenuation;
  113.     TQ3Point3D                         location;
  114.     TQ3Vector3D                     direction;
  115.     float                             hotAngle;
  116.     float                             outerAngle;
  117.     TQ3FallOffType                     fallOff;
  118. };
  119. typedef struct TQ3SpotLightData            TQ3SpotLightData;
  120. /******************************************************************************
  121.  **                                                                             **
  122.  **                    Light routines (apply to all TQ3LightObjects)             **
  123.  **                                                                             **
  124.  *****************************************************************************/
  125. EXTERN_API_C( TQ3ObjectType )
  126. Q3Light_GetType                    (TQ3LightObject         light);
  127.  
  128. EXTERN_API_C( TQ3Status )
  129. Q3Light_GetState                (TQ3LightObject         light,
  130.                                  TQ3Boolean *            isOn);
  131.  
  132. EXTERN_API_C( TQ3Status )
  133. Q3Light_GetBrightness            (TQ3LightObject         light,
  134.                                  float *                brightness);
  135.  
  136. EXTERN_API_C( TQ3Status )
  137. Q3Light_GetColor                (TQ3LightObject         light,
  138.                                  TQ3ColorRGB *            color);
  139.  
  140. EXTERN_API_C( TQ3Status )
  141. Q3Light_SetState                (TQ3LightObject         light,
  142.                                  TQ3Boolean             isOn);
  143.  
  144. EXTERN_API_C( TQ3Status )
  145. Q3Light_SetBrightness            (TQ3LightObject         light,
  146.                                  float                     brightness);
  147.  
  148. EXTERN_API_C( TQ3Status )
  149. Q3Light_SetColor                (TQ3LightObject         light,
  150.                                  const TQ3ColorRGB *    color);
  151.  
  152. EXTERN_API_C( TQ3Status )
  153. Q3Light_GetData                    (TQ3LightObject         light,
  154.                                  TQ3LightData *            lightData);
  155.  
  156. EXTERN_API_C( TQ3Status )
  157. Q3Light_SetData                    (TQ3LightObject         light,
  158.                                  const TQ3LightData *    lightData);
  159.  
  160.  
  161. /******************************************************************************
  162.  **                                                                             **
  163.  **                            Specific Light Routines                               **
  164.  **                                                                             **
  165.  *****************************************************************************/
  166. /******************************************************************************
  167.  **                                                                             **
  168.  **                            Ambient Light                                       **
  169.  **                                                                             **
  170.  *****************************************************************************/
  171. EXTERN_API_C( TQ3LightObject )
  172. Q3AmbientLight_New                (const TQ3LightData *    lightData);
  173.  
  174. EXTERN_API_C( TQ3Status )
  175. Q3AmbientLight_GetData            (TQ3LightObject         light,
  176.                                  TQ3LightData *            lightData);
  177.  
  178. EXTERN_API_C( TQ3Status )
  179. Q3AmbientLight_SetData            (TQ3LightObject         light,
  180.                                  const TQ3LightData *    lightData);
  181.  
  182.  
  183. /******************************************************************************
  184.  **                                                                             **
  185.  **                        Directional Light                                     **
  186.  **                                                                             **
  187.  *****************************************************************************/
  188. EXTERN_API_C( TQ3LightObject )
  189. Q3DirectionalLight_New            (const TQ3DirectionalLightData * directionalLightData);
  190.  
  191. EXTERN_API_C( TQ3Status )
  192. Q3DirectionalLight_GetCastShadowsState (TQ3LightObject     light,
  193.                                  TQ3Boolean *            castsShadows);
  194.  
  195. EXTERN_API_C( TQ3Status )
  196. Q3DirectionalLight_GetDirection    (TQ3LightObject         light,
  197.                                  TQ3Vector3D *            direction);
  198.  
  199. EXTERN_API_C( TQ3Status )
  200. Q3DirectionalLight_SetCastShadowsState (TQ3LightObject     light,
  201.                                  TQ3Boolean             castsShadows);
  202.  
  203. EXTERN_API_C( TQ3Status )
  204. Q3DirectionalLight_SetDirection    (TQ3LightObject         light,
  205.                                  const TQ3Vector3D *    direction);
  206.  
  207. EXTERN_API_C( TQ3Status )
  208. Q3DirectionalLight_GetData        (TQ3LightObject         light,
  209.                                  TQ3DirectionalLightData * directionalLightData);
  210.  
  211. EXTERN_API_C( TQ3Status )
  212. Q3DirectionalLight_SetData        (TQ3LightObject         light,
  213.                                  const TQ3DirectionalLightData * directionalLightData);
  214.  
  215.  
  216. /******************************************************************************
  217.  **                                                                             **
  218.  **                        Point Light                                              **
  219.  **                                                                             **
  220.  *****************************************************************************/
  221. EXTERN_API_C( TQ3LightObject )
  222. Q3PointLight_New                (const TQ3PointLightData * pointLightData);
  223.  
  224. EXTERN_API_C( TQ3Status )
  225. Q3PointLight_GetCastShadowsState (TQ3LightObject         light,
  226.                                  TQ3Boolean *            castsShadows);
  227.  
  228. EXTERN_API_C( TQ3Status )
  229. Q3PointLight_GetAttenuation        (TQ3LightObject         light,
  230.                                  TQ3AttenuationType *    attenuation);
  231.  
  232. EXTERN_API_C( TQ3Status )
  233. Q3PointLight_GetLocation        (TQ3LightObject         light,
  234.                                  TQ3Point3D *            location);
  235.  
  236. EXTERN_API_C( TQ3Status )
  237. Q3PointLight_GetData            (TQ3LightObject         light,
  238.                                  TQ3PointLightData *    pointLightData);
  239.  
  240. EXTERN_API_C( TQ3Status )
  241. Q3PointLight_SetCastShadowsState (TQ3LightObject         light,
  242.                                  TQ3Boolean             castsShadows);
  243.  
  244. EXTERN_API_C( TQ3Status )
  245. Q3PointLight_SetAttenuation        (TQ3LightObject         light,
  246.                                  TQ3AttenuationType     attenuation);
  247.  
  248. EXTERN_API_C( TQ3Status )
  249. Q3PointLight_SetLocation        (TQ3LightObject         light,
  250.                                  const TQ3Point3D *        location);
  251.  
  252. EXTERN_API_C( TQ3Status )
  253. Q3PointLight_SetData            (TQ3LightObject         light,
  254.                                  const TQ3PointLightData * pointLightData);
  255.  
  256.  
  257. /******************************************************************************
  258.  **                                                                             **
  259.  **                        Spot Light                                              **
  260.  **                                                                             **
  261.  *****************************************************************************/
  262. EXTERN_API_C( TQ3LightObject )
  263. Q3SpotLight_New                    (const TQ3SpotLightData * spotLightData);
  264.  
  265. EXTERN_API_C( TQ3Status )
  266. Q3SpotLight_GetCastShadowsState    (TQ3LightObject         light,
  267.                                  TQ3Boolean *            castsShadows);
  268.  
  269. EXTERN_API_C( TQ3Status )
  270. Q3SpotLight_GetAttenuation        (TQ3LightObject         light,
  271.                                  TQ3AttenuationType *    attenuation);
  272.  
  273. EXTERN_API_C( TQ3Status )
  274. Q3SpotLight_GetLocation            (TQ3LightObject         light,
  275.                                  TQ3Point3D *            location);
  276.  
  277. EXTERN_API_C( TQ3Status )
  278. Q3SpotLight_GetDirection        (TQ3LightObject         light,
  279.                                  TQ3Vector3D *            direction);
  280.  
  281. EXTERN_API_C( TQ3Status )
  282. Q3SpotLight_GetHotAngle            (TQ3LightObject         light,
  283.                                  float *                hotAngle);
  284.  
  285. EXTERN_API_C( TQ3Status )
  286. Q3SpotLight_GetOuterAngle        (TQ3LightObject         light,
  287.                                  float *                outerAngle);
  288.  
  289. EXTERN_API_C( TQ3Status )
  290. Q3SpotLight_GetFallOff            (TQ3LightObject         light,
  291.                                  TQ3FallOffType *        fallOff);
  292.  
  293. EXTERN_API_C( TQ3Status )
  294. Q3SpotLight_GetData                (TQ3LightObject         light,
  295.                                  TQ3SpotLightData *        spotLightData);
  296.  
  297. EXTERN_API_C( TQ3Status )
  298. Q3SpotLight_SetCastShadowsState    (TQ3LightObject         light,
  299.                                  TQ3Boolean             castsShadows);
  300.  
  301. EXTERN_API_C( TQ3Status )
  302. Q3SpotLight_SetAttenuation        (TQ3LightObject         light,
  303.                                  TQ3AttenuationType     attenuation);
  304.  
  305. EXTERN_API_C( TQ3Status )
  306. Q3SpotLight_SetLocation            (TQ3LightObject         light,
  307.                                  const TQ3Point3D *        location);
  308.  
  309. EXTERN_API_C( TQ3Status )
  310. Q3SpotLight_SetDirection        (TQ3LightObject         light,
  311.                                  const TQ3Vector3D *    direction);
  312.  
  313. EXTERN_API_C( TQ3Status )
  314. Q3SpotLight_SetHotAngle            (TQ3LightObject         light,
  315.                                  float                     hotAngle);
  316.  
  317. EXTERN_API_C( TQ3Status )
  318. Q3SpotLight_SetOuterAngle        (TQ3LightObject         light,
  319.                                  float                     outerAngle);
  320.  
  321. EXTERN_API_C( TQ3Status )
  322. Q3SpotLight_SetFallOff            (TQ3LightObject         light,
  323.                                  TQ3FallOffType         fallOff);
  324.  
  325. EXTERN_API_C( TQ3Status )
  326. Q3SpotLight_SetData                (TQ3LightObject         light,
  327.                                  const TQ3SpotLightData * spotLightData);
  328.  
  329.  
  330.  
  331.  
  332.  
  333. #if PRAGMA_ENUM_ALWAYSINT
  334.     #pragma enumsalwaysint reset
  335. #elif PRAGMA_ENUM_OPTIONS
  336.     #pragma option enum=reset
  337. #elif defined(PRAGMA_ENUM_PACK__QD3DLIGHT__)
  338.     #pragma options(pack_enums)
  339. #endif
  340.  
  341. #if PRAGMA_STRUCT_ALIGN
  342.     #pragma options align=reset
  343. #elif PRAGMA_STRUCT_PACKPUSH
  344.     #pragma pack(pop)
  345. #elif PRAGMA_STRUCT_PACK
  346.     #pragma pack()
  347. #endif
  348.  
  349. #ifdef PRAGMA_IMPORT_OFF
  350. #pragma import off
  351. #elif PRAGMA_IMPORT
  352. #pragma import reset
  353. #endif
  354.  
  355. #ifdef __cplusplus
  356. }
  357. #endif
  358.  
  359. #endif /* __QD3DLIGHT__ */
  360.  
  361.